﻿using AiFrame.InterfaceLib.Data.Access;
using AiFrame.InterfaceLib.Data.Provider;
using AiFrame.InterfaceLib.MVP;
using AiFrame.InterfaceLib.Windows.Themes;
using AiFrame.InterfaceLib.Windows.UI;

namespace AiFrame.InterfaceLib.Plugins
{
    /// <summary>
    /// Specifies the central interface for the plugin communication.
    /// </summary>
    public interface ICoreInterface
    {
        /// <summary>
        /// Returns the database connection.
        /// </summary>
        IDatabaseConnection DatabaseConnection { get; }

        /// <summary>
        /// Returns the window manager.
        /// </summary>
        IWindowManager<IWindow> WindowManager { get; }

        /// <summary>
        /// Returns the styleguid for the user interface.
        /// </summary>
        IStyleGuideUI StyleGuideUI { get; }

        /// <summary>
        /// Returns the navigation bar.
        /// </summary>
        INavigationBar NavigationBar { get; }

        /// <summary>
        /// Returns the current application theme.
        /// </summary>
        ITheme Theme { get; }

        /// <summary>
        /// Returns the provider manager to register database providers.
        /// </summary>
        IDbProviderRegistration ProviderRegistration { get; }

        /// <summary>
        /// Returns the plugin manager.
        /// </summary>
        IPluginManager PluginManager { get; }

        /// <summary>
        /// Returns the factory manager.
        /// </summary>
        IFactoryManager FactoryManager { get; }

        /// <summary>
        /// Returns the toolbar manager.
        /// </summary>
        /// <value></value>
        IToolBarManager ToolBarManager { get; }

        /// <summary>
        /// Returns the main menu.
        /// </summary>
        IMainMenu MainMenu { get; }
    }
}